package draven;


public class Test {

    public static void main(String[] args) {
        Badman observable = new Badman();
        Police police = new Police();
        observable.addObserver(police);
        observable.run();
    }
}

/**
 * 在Spring 的运用实践
 * <p>
 * 事件     被观察者具体要执行的动作   相当于坏人的run  只不过是spring 抽出成一个对象
 * <p>
 * 监听器   观察者（可以是多个）   接受不同的事件来做不同的处理工作
 * <p>
 * 多播器   把被观察者遍历观察者通知消息的操作拿出来委托给一个多播器来进行消息通知，或者说通过观察者进行不同的操作
 * <p>
 * 事件源   谁来调用或执行发布具体的事件
 * <p>
 * <p>
 * 逻辑执行过程：
 * 1.事件源发布不同的事件
 * 2.当发布事件之后会调用多播器的方法来进行事件广播操作，由多播器去触发具体的监听器去执行操作
 * 3.监听器接收到具体的事件后，可以验证匹配是否能处理当前事件，如果可以，直接处理，如果不行，不做任何操作
 * <p>
 * 实际代码处理：
 * 1、提前准备好N多个事件
 * 2、初始化多播器（创建多播器对象，此多播器对象中应该包含一个监听器的集合）
 * 3、准备好一系列的监听器
 * 4、向多播器中注册进去已有的监听器
 * 5、准备事件发布，来通知多播器循环调用监听器进行相关的逻辑处理工作
 */
